import java.util.ArrayList;
import java.util.List;

public class BBSD2 {
    //两个角色A和B，攻击冷却时间分别为k1，k2秒，每次攻击能分别造成d1,d2的伤害。
    // 只要未在冷却中，角色可以自由选择攻击的时机，但只能在整数秒发动攻击。
    // 战斗时间总长为t秒。k1,k2,d1,d2,t都是正整数。角色A拥有增加伤害的技能：若B单独攻击时，A会清除当前冷却时间并跟随B一起攻击，
    // 攻击之后A重新开始计算冷却时间。请编写一段代码，计算两个角色在整场战斗中一共最多能造成多少伤害
    public double damage(int k1,int k2,int d1,int d2,int t,int x) {
        //创建两个数组将A和B的攻击时间记录下来
        //第0秒就放技能
        int attackCountA = t / k1 + 1;
        int attackCountB = t / k2 + 1;
        List<Integer> attackTimeA = new ArrayList<>();
        List<Integer> attackTimeB = new ArrayList<>();
        attackTimeA.add(0);
        attackTimeB.add(0);
        for (int i = 1; i < attackCountA; i++) {
            if (i == 1) attackTimeA.add(k1);
            else attackTimeA.add(attackTimeA.get(i - 1) + k1);
        }
        for (int i = 1; i < attackCountB; i++) {
            if (i == 1) attackTimeB.add(k2);
            else attackTimeB.add(attackTimeB.get(i - 1) + k2);
        }
        //根据B攻击的时间改变A攻击的时间
        for (int i = 0; i < attackCountB; i++) {
            int time = attackTimeB.get(i);
            if (!attackTimeA.contains(time)) {
                int k = 0;
                for (int j = 0; j < attackTimeA.size(); j++) {
                    if (attackTimeA.get(j) > attackTimeB.get(i)) {
                        k = j;
                        while (j < attackTimeA.size()) {
                            attackTimeA.remove(j);
                            j++;
                        }
                        attackTimeA.add(attackTimeB.get(i));
                        //重新计算A的攻击时间
                        while (attackTimeA.get(k) < t) {
                            attackTimeA.add(attackTimeA.get(k) + k1);
                            k++;
                        }
                        attackTimeA.remove(k);
                    }
                }
            }
        }
        //记录总伤害
        double sum = 0.0;
        //第t秒极限放出技能
        for (int i = 0; i <= t; i++) {
            if (attackTimeA.contains(i)) {
                    //A攻击
                sum += d1 * 1.0;
            }
            if (attackTimeB.contains(i)) {
                sum += d2 * 1.0;
            }
        }
        return sum;
    }
}

